home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue32 / hooks / myhook.pas
Encoding:
Pascal/Delphi Source File  |  1998-03-12  |  872 b   |  53 lines

  1. library MyHook;
  2. { ... }
  3. var
  4.   P86Mask: Pointer;
  5.  
  6. function MaskX86Exceptions: Pointer;
  7. var 
  8.   dwOldMask: Pointer;
  9. begin
  10.   asm
  11.     fnstcw WORD PTR dwOldMask;
  12.     mov eax, dwOldMask;
  13.     or eax, $3f;
  14.     mov WORD PTR dwOldMask + 2, ax;
  15.     fldcw WORD PTR dwOldMask + 2;
  16.   end;
  17.   result := dwOldMask;
  18. end;
  19.  
  20. procedure RestoreX86Mask(dwOldMask: Pointer);
  21. begin
  22.   asm
  23.     fnclex;
  24.     fldcw WORD PTR dwOldMask;
  25.   end;
  26. end;
  27.  
  28. { your hook procedure here }
  29.  
  30. procedure LibEnter;
  31. begin
  32.   P86Mask := MaskX86Exceptions;
  33. end;
  34.  
  35. procedure LibExit;
  36. begin
  37.   Restorex86Mask(P86Mask);
  38. end;
  39.  
  40. procedure DLLMain(Reason:DWORD);
  41. begin
  42.   case Reason of
  43.    DLL_PROCESS_DETACH : LibExit;
  44.    DLL_PROCESS_ATTACH : LibEnter;
  45.    DLL_THREAD_ATTACH  : ;
  46.    DLL_THREAD_DETACH  : ;
  47.   end;
  48. end;
  49.  
  50. begin
  51.   DLLProc := @DLLMain;
  52.   DLLMain(DLL_PROCESS_ATTACH);
  53. end.